package com.java2nb.novel.pay.entity;

import lombok.Data;


import javax.validation.constraints.Size;
import java.util.Date;

/**
 * 支付订单实体类（对应数据库表：t_pay_order）
 * 存储支付订单的核心信息，与支付网关交互的基础数据结构
 */
@Data
public class PayOrder {

    /**
     * 支付中心订单号（主键）
     * 格式：P + 时间戳 + 随机数，如P20240907153000123456
     */
    private String payOrderNo;

    /**
     * 商户号
     * 与商户配置表t_mch_info的mch_no关联
     */
    private String mchNo;

    /**
     * 应用ID
     * 与商户应用配置表t_mch_app的app_id关联
     */
    private String appId;

    /**
     * 商户订单号
     * 商户系统生成的唯一订单号
     */
    private String mchOrderNo;

    /**
     * 支付方式编码
     * 如：WECHAT_H5, ALIPAY_APP, UNIONPAY_QR等
     */
    private String wayCode;

    /**
     * 支付金额（单位：分）
     * 避免浮点数精度问题，统一用分表示
     */
    private Integer amount;

    /**
     * 货币代码
     * 目前仅支持CNY（人民币）
     */
    private String currency = "CNY";

    /**
     * 支付状态
     * 0:待支付, 1:支付成功, 2:支付失败, 3:已关闭
     * 对应OrderStatusEnum枚举
     */
    private Integer orderState;

    /**
     * 商品标题
     * 展示在支付页面的商品标题
     */
    private String subject;

    /**
     * 商品描述
     * 商品的详细描述
     */
    private String body;

    /**
     * 客户端IP
     * 发起支付的客户端IP地址
     */
    private String clientIp;

    /**
     * 异步通知地址
     * 支付结果回调通知的URL
     */
    private String notifyUrl;

    /**
     * 同步跳转地址
     * 支付完成后前端跳转的URL
     */
    private String returnUrl;

    /**
     * 订单失效时间
     * 超过该时间订单自动关闭（13位时间戳）
     */
    private Long expiredTime;

    /**
     * 订单创建时间
     */
    private Date createTime;

    /**
     * 支付成功时间
     * 支付状态变为成功时的时间
     */
    private Date payTime;

    /**
     * 渠道流水号
     * 支付渠道返回的交易流水号
     */
    private String channelTrxId;

    /**
     * 渠道用户标识
     * 如微信openId，支付宝userId等
     */
    private String channelUser;

    /**
     * 扩展参数
     * 商户自定义参数，回调时原样返回
     */
    private String extParam;

    /**
     * 订单关闭时间
     */
    private Date closeTime;

    /**
     * 最后更新时间
     */
    private Date updateTime;

    /**
     * 版本号（乐观锁）
     * 用于并发更新控制
     */
    private Integer version = 0;

    @Size(max = 256, message = "渠道参数channelExtra长度不能超过256字符")
    private String  channelExtra ;

    /** 支付参数（如支付链接、小程序参数等，JSON格式） */
    private String payParams;

    /**payUrl-跳转链接的方式 form-表单方式 wxapp-微信支付参数(微信公众号,小程序,app支付时) aliapp-支付宝app支付参数 ysfapp-云闪付app支付参数 codeUrl-二维码地址 codeImgUrl-二维码图片地址 none-空支付参数**/
    private String  payDataType;
}